10.10 PrimoAgent - 轻量级多智能体股票分析系统
本节概述
在深入学习了 TradingAgent 这个复杂的15节点系统后,我们来看一个更轻量但同样强大的替代方案——PrimoAgent。这是一个基于 LangGraph 的顺序流水线系统,通过4个专业化智能体协作完成股票分析和交易信号生成。
项目地址: https://github.com/ivebotunac/PrimoAgent
项目定位
PrimoAgent 是一个 AI 驱动的股票分析系统,旨在提供每日交易洞察和预测次日价格走势。该平台将自然语言处理(NLP)与技术分析和投资组合管理相结合,以增强股票市场的决策能力,最大限度降低风险。
核心特点
- 顺序流水线架构: 4个智能体按序执行,每个建立在前一个的输出之上
- 7维NLP特征提取: 从金融新闻中提取量化情感指标
- 风险评估与仓位管理: 智能计算置信度和仓位大小
- 回测框架: 包含完整的性能评估和可视化
系统架构
整体流程
┌─────────────────────────────────────────────────────────────────┐
│ PrimoAgent 顺序流水线 │
│ │
│ 用户输入 (股票代码 + 日期范围) │
│ ↓ │
│ ┌─────────────────┐ │
│ │ Data Collection │ ← yFinance + Finnhub API │
│ │ Agent │ 获取市场数据和公司信息 │
│ └────────┬────────┘ │
│ ↓ │
│ ┌─────────────────┐ │
│ │ Technical │ ← 计算6大技术指标 │
│ │ Analysis Agent │ SMA, RSI, MACD, BB, ADX, CCI │
│ └────────┬────────┘ │
│ ↓ │
│ ┌─────────────────┐ │
│ │ News │ ← 7维NLP情感分析 │
│ │ Intelligence │ 新闻相关性、情绪、价格影响等 │
│ └────────┬────────┘ │
│ ↓ │
│ ┌─────────────────┐ │
│ │ Portfolio │ → 生成交易信号 │
│ │ Manager Agent │ BUY/SELL/HOLD + 置信度 + 仓位 │
│ └─────────────────┘ │
│ ↓ │
│ 输出: 每日分析CSV + 回测报告 │
│ │
└─────────────────────────────────────────────────────────────────┘项目结构
PrimoAgent/
├── main.py # 主分析脚本
├── backtest.py # 回测脚本
├── requirements.txt # 依赖列表
├── .env.example # API密钥模板
│
├── src/
│ ├── agents/ # 4个智能体模块
│ │ ├── data_collection_agent.py
│ │ ├── technical_analysis_agent.py
│ │ ├── news_intelligence_agent.py
│ │ └── portfolio_manager_agent.py
│ │
│ ├── workflows/ # LangGraph状态管理
│ │ ├── state.py # AgentState定义
│ │ └── workflow.py # 图构建与执行
│ │
│ ├── prompts/ # LLM提示词模板
│ ├── tools/ # 外部API集成
│ ├── config/ # 配置管理
│ └── backtesting/ # 回测引擎
│
└── output/
├── csv/ # 每日分析结果
└── backtests/ # 回测图表和报告四大智能体详解
1. Data Collection Agent (数据采集智能体)
职责: 收集实时市场数据和公司基本面信息
数据来源:
| API | 数据类型 |
|---|---|
| yFinance | 股票价格、成交量、历史数据 |
| Finnhub | 公司简介、财务指标、新闻 |
输出字段:
- 当前价格、开盘价、最高价、最低价
- 成交量、52周高低点
- P/E比率、市值、股息率
- 公司名称、行业、业务描述
2. Technical Analysis Agent (技术分析智能体)
职责: 计算6大技术指标用于趋势评估
技术指标详解:
| 指标 | 全称 | 作用 |
|---|---|---|
| SMA | Simple Moving Average | 识别趋势方向 |
| RSI | Relative Strength Index | 判断超买/超卖 |
| MACD | Moving Average Convergence Divergence | 动量和趋势信号 |
| BB | Bollinger Bands | 波动性和价格通道 |
| ADX | Average Directional Index | 趋势强度测量 |
| CCI | Commodity Channel Index | 周期性买卖信号 |
信号解读示例:
RSI = 72 → 超买区域,可能回调
MACD 向上交叉 → 看涨信号
ADX > 25 → 趋势明显3. News Intelligence Agent (新闻情报智能体)
职责: 使用7维NLP指标分析金融新闻
这是 PrimoAgent 最独特的部分——将新闻转化为量化指标。
7维NLP特征 (取值范围: -2 到 +2):
| 特征 | 含义 | 示例 |
|---|---|---|
| news_relevance | 新闻与公司的相关性 | +2: 直接提及公司业绩 |
| sentiment | 整体情感倾向 | -2: 极度负面,+2: 极度正面 |
| price_impact_potential | 价格影响潜力 | +2: 可能引发大幅波动 |
| trend_direction | 趋势方向指示 | +1: 看涨,-1: 看跌 |
| earnings_impact | 盈利影响预期 | +2: 预计大幅提升盈利 |
| investor_confidence | 投资者信心变化 | -1: 信心下降 |
| risk_profile_change | 风险特征变化 | -2: 风险大幅增加 |
处理流程:
新闻获取 (Finnhub API)
↓
内容过滤 (排除广告/无关内容)
↓
重要性评分 (0.0-1.0)
↓
内容增强 (抓取全文+摘要)
↓
NLP特征提取 (7个指标)4. Portfolio Manager Agent (投资组合管理智能体)
职责: 综合所有输入,生成交易信号
输入数据:
- 技术指标 (来自 Technical Analysis Agent)
- 基本面数据 (来自 Data Collection Agent)
- NLP特征 (来自 News Intelligence Agent)
- 历史交易决策 (来自CSV记录)
输出格式:
| 字段 | 取值范围 | 说明 |
|---|---|---|
| trading_signal | BUY / SELL / HOLD | 交易方向 |
| confidence_level | 0.1, 0.2, ... 1.0 | 置信度(10档) |
| position_size | 10, 20, ... 100 | 仓位百分比(10档) |
决策逻辑:
# 简化的决策流程
if technical_bullish and sentiment > 0 and confidence > 0.7:
signal = "BUY"
position = calculate_position(confidence, risk_profile)
elif technical_bearish or sentiment < -1:
signal = "SELL"
else:
signal = "HOLD"LangGraph 实现
AgentState 状态定义
from typing_extensions import TypedDict
from typing import List, Dict, Any, Optional
class AgentState(TypedDict):
"""PrimoAgent 统一状态结构"""
# 会话信息
session_id: str # 唯一工作流标识
symbols: List[str] # 分析的股票代码
current_step: str # 当前工作流阶段
analysis_date: str # 分析日期 (YYYY-MM-DD)
# 各智能体输出
data_collection_results: Optional[Dict[str, Any]] # 市场数据
technical_analysis_results: Optional[Dict[str, Any]] # 技术指标
news_intelligence_results: Optional[Dict[str, Any]] # 新闻NLP特征
portfolio_manager_results: Optional[Dict[str, Any]] # 交易建议
# 错误处理
error: Optional[str]工作流构建
from langgraph.graph import StateGraph, START, END
def create_workflow():
"""创建 PrimoAgent 工作流"""
# 初始化状态图
workflow = StateGraph(AgentState)
# 添加4个智能体节点
workflow.add_node("data_collection", data_collection_node)
workflow.add_node("technical_analysis", technical_analysis_node)
workflow.add_node("news_intelligence", news_intelligence_node)
workflow.add_node("portfolio_manager", portfolio_manager_node)
# 设置顺序执行边
workflow.add_edge(START, "data_collection")
workflow.add_edge("data_collection", "technical_analysis")
workflow.add_edge("technical_analysis", "news_intelligence")
workflow.add_edge("news_intelligence", "portfolio_manager")
workflow.add_edge("portfolio_manager", END)
return workflow.compile()流程图:
graph LR
START --> DC[Data Collection]
DC --> TA[Technical Analysis]
TA --> NI[News Intelligence]
NI --> PM[Portfolio Manager]
PM --> END节点实现示例
async def data_collection_node(state: AgentState) -> Dict:
"""数据采集节点"""
print(f"[Data Collection] 开始采集 {state['symbols']} 的数据...")
results = {}
for symbol in state["symbols"]:
# 获取价格数据
price_data = yfinance.get_stock_data(symbol)
# 获取公司信息
company_info = finnhub.get_company_profile(symbol)
results[symbol] = {
"price": price_data,
"company": company_info,
"current_price": price_data["close"][-1]
}
print(f"[Data Collection] 当前价格: {results[symbol]['current_price']}")
return {
"data_collection_results": results,
"current_step": "data_collection_complete"
}回测结果分析
整体收益对比

各股票详细表现
META (Meta Platforms)

| 指标 | PrimoAgent | Buy and Hold |
|---|---|---|
| 总收益 | 31.97% | 22.16% |
| 夏普比率 | 2.899 | 1.45 |
| 最大回撤 | 8.5% | 15.2% |
| 波动率 | 11.02% | 22.54% |
分析: META 是 PrimoAgent 表现最佳的标的,超额收益近10%,且波动率降低一半以上。
NFLX (Netflix)

| 指标 | PrimoAgent | Buy and Hold |
|---|---|---|
| 总收益 | 28.61% | 49.51% |
| 夏普比率 | 2.570 | 1.82 |
| 最大回撤 | 6.8% | 18.3% |
| 波动率 | 11.13% | 27.21% |
分析: 虽然绝对收益低于被动持有,但风险调整后收益(夏普比率)更优。
AAPL (Apple)

| 指标 | PrimoAgent | Buy and Hold |
|---|---|---|
| 总收益 | -6.88% | -1.23% |
| 最大回撤 | 9.82% | 29.76% |
| 波动率 | 10.52% | 21.79% |
分析: 两者均亏损,但 PrimoAgent 成功将最大回撤控制在10%以内。
TSLA (Tesla)

| 指标 | PrimoAgent | Buy and Hold |
|---|---|---|
| 总收益 | -3.35% | -16.59% |
| 最大回撤 | 12.4% | 45.2% |
| 波动率 | 21.47% | 75.75% |
分析: TSLA 是高波动股票,PrimoAgent 显著降低了下跌风险。
回测总结
PrimoAgent 的优势:
- 波动率控制: 所有股票的波动率都大幅降低 (6.52%-21.47% vs 21.79%-75.75%)
- 回撤保护: 最大回撤普遍低于被动持有 (WMT: 4.74% vs 21.73%)
- 风险调整收益: 夏普比率在多数情况下更优
适用场景:
- 风险厌恶型投资者
- 追求稳定收益而非最大化回报
- 需要自动化风险管理
PrimoAgent vs TradingAgent 对比
架构对比
| 维度 | PrimoAgent | TradingAgent |
|---|---|---|
| 智能体数量 | 4个 | 15个节点 |
| 执行模式 | 顺序流水线 | 多阶段+循环 |
| 循环数量 | 0个 | 6个 |
| 工作流类型 | 单一线性 | 复杂分支 |
| 辩论机制 | 无 | 牛熊辩论 + 风险三方辩论 |
| 执行时间 | 约30秒 | 约160秒 |
功能对比
┌────────────────────────────────────────────────────────────────────┐
│ 功能对比 │
├────────────────────────────────────────────────────────────────────┤
│ │
│ PrimoAgent TradingAgent │
│ ────────── ──────────── │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │Data Collect │ │Market Analyst│ ┐ │
│ └──────┬──────┘ │Social Analyst│ │ 4个分析师 │
│ ↓ │News Analyst │ │ 并行工作 │
│ ┌─────────────┐ │Fund. Analyst │ ┘ │
│ │Tech Analysis│ └──────┬───────┘ │
│ └──────┬──────┘ ↓ │
│ ↓ ┌─────────────┐ │
│ ┌─────────────┐ │Bull vs Bear │ 辩论循环 │
│ │News Intel. │ │Research Mgr │ │
│ └──────┬──────┘ └──────┬──────┘ │
│ ↓ ↓ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │Portfolio Mgr│ │ Trader │ │
│ └─────────────┘ └──────┬──────┘ │
│ ↓ │
│ ┌─────────────┐ │
│ │Risky→Safe→ │ 风险三方辩论 │
│ │Neutral→Judge│ │
│ └─────────────┘ │
│ │
└────────────────────────────────────────────────────────────────────┘技术栈对比
| 技术 | PrimoAgent | TradingAgent |
|---|---|---|
| 核心框架 | LangGraph | LangGraph |
| 状态管理 | TypedDict | TypedDict + 嵌套State |
| LLM | OpenAI GPT | 多模型支持 |
| 数据源 | yFinance + Finnhub | 多源 (含社交媒体) |
| 回测 | 内置完整框架 | 需外部工具 |
| 持久化 | CSV | ChromaDB |
设计理念对比
| 理念 | PrimoAgent | TradingAgent |
|---|---|---|
| 复杂度 | 简单直接 | 模拟真实交易公司 |
| 决策过程 | 单一智能体决策 | 多方辩论制衡 |
| 可解释性 | 中等 | 高 (完整推理链) |
| 扩展性 | 添加智能体简单 | 需修改Graph结构 |
| 学习曲线 | 低 | 高 |
性能对比
| 指标 | PrimoAgent | TradingAgent |
|---|---|---|
| 执行速度 | 约30秒/股票 | 约160秒/股票 |
| API调用 | 4-8次 | 20+次 |
| LLM Token | 中等 | 高 |
| 准确率 | META: 31.97% | AAPL: 26.62% |
适用场景
PrimoAgent 适合:
├── 快速原型开发
├── 学习LangGraph基础
├── 低延迟要求场景
├── 单一投资策略
└── 资源受限环境
TradingAgent 适合:
├── 生产级交易系统
├── 需要多方验证的决策
├── 高价值交易
├── 需要可解释性的场景
└── 模拟真实交易公司流程快速开始
环境配置
# 克隆仓库
git clone https://github.com/ivebotunac/PrimoAgent.git
cd PrimoAgent
# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 安装依赖
pip install -r requirements.txt
# 配置API密钥
cp .env.example .env必需的API密钥
# .env 文件
OPENAI_API_KEY=sk-xxx
FINNHUB_API_KEY=xxx
FIRECRAWL_API_KEY=xxx
PERPLEXITY_API_KEY=xxx运行分析
# 运行主分析
python main.py
# 交互式输入
# Stock symbol: AAPL
# Start date (YYYY-MM-DD): 2024-10-01
# End date (YYYY-MM-DD): 2024-12-01运行回测
python backtest.py技术亮点
1. 7维NLP情感分析
PrimoAgent 最独特的创新是将新闻情感量化为7个维度,而非简单的正/负/中性分类。
# 传统情感分析
sentiment = "positive" # 信息量有限
# PrimoAgent 7维分析
nlp_features = {
"news_relevance": 2, # 高度相关
"sentiment": 1, # 轻微正面
"price_impact_potential": 2, # 高影响潜力
"trend_direction": 1, # 看涨
"earnings_impact": 0, # 无明显影响
"investor_confidence": 1, # 信心提升
"risk_profile_change": -1 # 风险略增
}2. 置信度驱动的仓位管理
# 置信度与仓位映射
confidence_to_position = {
0.1: 10, # 低置信度对应小仓位
0.5: 50, # 中置信度对应中仓位
1.0: 100, # 高置信度对应满仓
}3. 顺序流水线的简洁性
相比 TradingAgent 的复杂循环,PrimoAgent 采用纯顺序执行,代码更易理解和维护。
扩展建议
添加新的技术指标
# src/agents/technical_analysis_agent.py
def calculate_indicators(data):
indicators = {
"SMA": calculate_sma(data, period=20),
"RSI": calculate_rsi(data, period=14),
# 添加新指标
"OBV": calculate_obv(data), # 成交量指标
"ATR": calculate_atr(data), # 波动率指标
}
return indicators添加辩论机制
# 参考 TradingAgent 的设计
workflow.add_node("bull_analyst", bull_node)
workflow.add_node("bear_analyst", bear_node)
# 添加辩论循环
workflow.add_conditional_edges(
"bull_analyst",
should_continue_debate,
["bear_analyst", "portfolio_manager"]
)集成更多数据源
# 添加社交媒体情感
def get_social_sentiment(symbol):
twitter_data = twitter_api.search(symbol)
reddit_data = reddit_api.search(symbol)
return aggregate_sentiment(twitter_data, reddit_data)本节小结
通过本节学习,你应该掌握:
- PrimoAgent 的4智能体顺序流水线架构
- 7维NLP情感分析的创新方法
- LangGraph 状态管理和工作流构建
- PrimoAgent 与 TradingAgent 的详细对比
- 回测结果的解读和策略评估
核心收获:
- 简单也可以强大: PrimoAgent 证明了不需要复杂的循环和辩论机制也能构建有效的交易系统
- NLP特征工程的价值: 7维情感分析比简单分类提供更丰富的信息
- 风险管理优先: PrimoAgent 的设计哲学是控制风险而非最大化收益
上一节: 10.9 本章小结
返回目录: 10.0 本章介绍
项目地址: PrimoAgent GitHub
最后更新: 2025年12月作者: Bryce Wang